﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Kaesoft.Hospedaje.Common;
using Kaesoft.Hospedaje.Entities;
using Kaesoft.Hospedaje.Proxy;

namespace Kaesoft.Hospedaje.DatosReglasViews
{
    public class HabitacionesViewModel : ViewModelBase
    {
        private ObservableCollection<ApplicationInfo> _serviciosHospedaje = GenerateApplicationInfos();
        private ObservableCollection<ApplicationInfo> _serviciosHabitacion = GenerateCustomApplicationInfos();
        private BarraTareasViewModel _barraTareasViewModel;
        private List<Habitacion> _habitacionesActivas;
        private BuscadorViewModel _buscadorViewModelBinding;
        private Habitacion _habitacionSeleccionada;
        private TrackableCollection<ServicioHabitacion> _servicioHabitacionCollection;

        public TrackableCollection<ServicioHabitacion> ServicioHabitacionCollection
        {
            get { return _servicioHabitacionCollection; }
            set
            {
                if (_servicioHabitacionCollection != value)
                {
                    _servicioHabitacionCollection = value;
                    OnPropertyChanged("ServicioHabitacionCollection");
                }
            }
        }
        
        public Habitacion HabitacionSeleccionada
        {
            get { return _habitacionSeleccionada; }
            set
            {
                if (_habitacionSeleccionada != value)
                {
                    _habitacionSeleccionada = value;
                    OnPropertyChanged("HabitacionSeleccionada");
                }
            }
        }

        public BuscadorViewModel BuscadorViewModelBinding
        {
            get { return _buscadorViewModelBinding; }
            set
            {
                if (_buscadorViewModelBinding != value)
                {
                    _buscadorViewModelBinding = value;
                    OnPropertyChanged("BuscadorViewModelBinding");
                }
            }
        }
        
        public List<Habitacion> HabitacionesActivas
        {
            get { return _habitacionesActivas; }
            set
            {
                if (_habitacionesActivas != value)
                {
                    _habitacionesActivas = value;
                    OnPropertyChanged("HabitacionesActivas");
                }
            }
        }

        public ObservableCollection<ApplicationInfo> ServiciosHospedaje
        {
            get
            {
                return _serviciosHospedaje;
            }
            set
            {
                if (_serviciosHospedaje != value)
                {
                    _serviciosHospedaje = value;
                    OnPropertyChanged("ServiciosHospedaje");
                }
            }
        }

        public BarraTareasViewModel BarraTareasViewModel
        {
            get { return _barraTareasViewModel; }
            set
            {
                if (_barraTareasViewModel != value)
                {
                    _barraTareasViewModel = value;
                    OnPropertyChanged("BarraTareasViewModel");
                }
            }
        }

        private void CargaListasIniciales()
        {
            ProxyDatosReglas.ObtenerHabitacionesAsync(s=>
            {
                if (s.Error == null)
                    HabitacionesActivas = s.Result;
            });
        }

        private void HabilitarBotones()
        {
            BarraTareasViewModel = new BarraTareasViewModel();
            BarraTareasViewModel.IsEnableGuardar = true;
            BarraTareasViewModel.IsVisibleGuardar = true;
            BarraTareasViewModel.IsVisibleNuevo = true;
            BarraTareasViewModel.IsEnableNuevo = true;
            BarraTareasViewModel.IsVisibleCancelar = true;
            BarraTareasViewModel.IsEnableCancelar = true;
            BarraTareasViewModel.IsVisibleEditar = true;
            BarraTareasViewModel.IsEnableEditar = true;
        }

        public HabitacionesViewModel()
        {
            HabilitarBotones();
            BuscadorViewModelBinding = new BuscadorViewModel();
            Conectado += HabitacionesViewModel_Conectado;
            ServiciosHabitacion.CollectionChanged += ServiciosAbitacion_CollectionChanged;
            BarraTareasViewModel.BotonTareaClick += BotonOperacionClick;
        }

        void HabitacionesViewModel_Conectado(object sender, EventArgs e)
        {
            BuscadorViewModelBinding.InicializaPaginaOrigen(_opcion.nombre);
        }

        private void BotonOperacionClick(object sender, EventArgs<string> e)
        {
            switch (e.Data)
            {
                case "Nuevo":
                    Nuevo();
                    break;
                case "Editar":
                    var al = "1";
                    break;
                case "Cancelar":
                    var al1 = "1";
                    break;
                case "Guardar":
                    Guardar();
                    break;
                default:
                    break;
            }
        }

        private void Nuevo()
        {
            HabitacionSeleccionada = new Habitacion();
            ServicioHabitacionCollection = new TrackableCollection<ServicioHabitacion>();
        }

        private void Guardar()
        {
            
            ServiciosHabitacion.ToList().ForEach(a=> ServicioHabitacionCollection.Add(new ServicioHabitacion()
                                                                                          {
                                                                                              idHabitacion = HabitacionSeleccionada.idHabitacion,
                                                                                              idServicio = a.Id,
                                                                                              estado = 1
                                                                                          }));
            HabitacionSeleccionada.banoPrivado = false;
            HabitacionSeleccionada.banocompartido = true;
            HabitacionSeleccionada.nombre = "habitacion 1";
            HabitacionSeleccionada.numeroToallas = 2;
            HabitacionSeleccionada.precio = decimal.Parse("20.00");
            HabitacionSeleccionada.estado = 1;
            HabitacionSeleccionada.tipo = 1;
            HabitacionSeleccionada.reservado = false;
            HabitacionSeleccionada.imagen = "";
            HabitacionSeleccionada.ServicioHabitacions = ServicioHabitacionCollection;
            ProxyDatosReglas.GuardarHabitacionAsync(HabitacionSeleccionada,s=>
                                                                               {
                                                                                   if(s.Error!=null)return;
                                                                                   var viewModelMessage = new MessageWindowViewModel("Habitación almacenada exitosamente",MessageBoxButtons.Ok, MessageBoxIcon.Information);
                                                                                   MessageBoxWindow.DataContext =
                                                                                       viewModelMessage;
                                                                                   MessageBoxWindow.ShowDialog();
                                                                               });
        }

        void ServiciosAbitacion_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            var data = e.NewItems;
            var jejejeje = "esperemos";
        }

        public ObservableCollection<ApplicationInfo> ServiciosHabitacion
        {
            get
            {
                return _serviciosHabitacion;
            }
            set
            {
                _serviciosHabitacion = value;
            }
        }

        public static ObservableCollection<ApplicationInfo> GenerateApplicationInfos()
        {
            var result = new List<Servicio>();
            var resultado = new ObservableCollection<ApplicationInfo>();
            ProxyDatosReglas.ObtenerServiciosAsync((s) =>
            {
                if (s.Error != null)
                    return;
                result = s.Result; 
                result.ForEach(a => resultado.Add(new ApplicationInfo() { Id = a.idServicio, Creador = "Costo: " + a.valor.Value.ToString("C", CultureInfo.CurrentCulture), Icono = a.imagen, Nombre = a.nombre, Precio = Convert.ToDouble(a.valor.Value) }));
            }
            );
            return resultado;
        }

        public static ObservableCollection<ApplicationInfo> GenerateCustomApplicationInfos()
        {
            var result = new ObservableCollection<ApplicationInfo>();
            return result;
        }
    }
}
